#include<iostream>
#include<signal.h>
#include<unistd.h>


void printfblock()
{
    sigset_t set,oset;
    sigemptyset(&set);
    sigemptyset(&oset);

    sigprocmask(SIG_BLOCK,&set,&oset);
    std::cout << "block:";
    for(int i= 31;i > 0;i--)
    {
        if(sigismember(&oset,i))
        {
            std::cout << 1;
        }
        else
        {
            std::cout << 0;
        }
    }
    std::cout << std::endl; 
}


//自定义方法
void handler(int sig)
{
    static int cnt = 0;
    cnt++;
    while(true)//2号信号进来不退出了
    {
        std::cout << "sig:"<< sig <<"count:" << cnt << std::endl;
        printfblock();
        sleep(1);
    }
    exit(1);
}

int main()
{
    struct sigaction act,oact;//定义2个系统的sigaction结构体
    act.sa_handler = handler;//将handler处理方法给sa_handler参数

    ::sigaction(2,&act,&oact);//sigaction

    while(true)
    {
        pause();
    }
}